//
//  WBUserAccountViewModel.swift
//  微博
//
//  Created by lipengfei on 15/9/7.
//  Copyright © 2015年 lipengfei. All rights reserved.
//

import UIKit
import ReactiveCocoa

class WBUserAccountViewModel: NSObject {
    ///  单例
    static let sharedUserAccount = WBUserAccountViewModel()
    override init() {
        userAccount = WBUserAccount.loadUserAccount()
    }
///  属性 
    /// 用户账户
    
    var userAccount: WBUserAccount?
    /// 以下属性，全部都是在userAccount 的基础上存在
    /// 计算型属性：每次调用不会重新分配内存空间，只是修改原来内存中保存的值
///  token
    var accessToke:String?{
        return userAccount?.access_token
    }
///  标记用户是否登录 bool
    var userLogin:Bool {
        return accessToke != nil
    }
///  头像的url 
    var avatarUrl:NSURL?{
        //如果用户没有设置头像，返回空
        return NSURL(string: userAccount?.avatar_large ?? "")
    }

///  加载网络数据
    ///加载用户token& 用户信息
    ///code : 用于获取用户的token
    func loadUserAccount(code: String) -> RACSignal {
        return RACSignal.createSignal({ (subscriber) -> RACDisposable! in
            //通过code 获取了用户的Token，保存在result 中
            WBNetworkTools.sharedTools.loadAccessToken(code).doNext({ (result) -> Void in
                //  通过token 得到用户的信息 -> 获取用户的授权码 uid
                let account = WBUserAccount(dict: result as! [String: AnyObject])
                self.userAccount = account
                // 通过token 和uid 获取用户的账户信息
                WBNetworkTools.sharedTools.loadUserInfo(account.uid!).subscribeNext({ (result) -> Void in
                    
                    let dict = result as! [String: AnyObject]
                    //设置账户的属性
                    account.name = dict["name"] as? String
                    account.avatar_large = dict["avatar_large"] as? String
                    account.saveUserAccount()
                    subscriber.sendCompleted()
                    }, error: { (error) -> Void in
                        subscriber.sendError(error)
                })
            }).subscribeError({ (error) -> Void in
                subscriber.sendError(error)
            })
        })
    }
    
}
